package com.zhp.anno;

import com.zhp.keyresolver.IdempotentKeyResolver;
import com.zhp.keyresolver.impl.DefaultIdempotentKeyResolver;

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
import java.util.concurrent.TimeUnit;

/**
 * @author zhanghp
 * @since 2024/5/27 10:05
 */
@Target({ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
public @interface Idempotent {

    /**
     * 幂等超时时间，默认1s<br/>
     * 超过指定时间，请求正常执行
     *
     * @return
     */
    int timeout() default 1;

    /**
     * 时间单位，默认second
     *
     * @return
     */
    TimeUnit timeunit() default TimeUnit.SECONDS;

    /**
     * 提示信息
     *
     * @return
     */
    String info() default "重复请求，请稍后再试";

    /**
     * key 解析器
     *
     * @return
     */
    Class<? extends IdempotentKeyResolver> keyResolver() default DefaultIdempotentKeyResolver.class;

    /**
     * key 参数，spel
     *
     * @return
     */
    String keyArg() default "";

}
